from django.shortcuts import render,HttpResponse,reverse
from django.contrib.auth.hashers import make_password, check_password
from ..models import *
from django.http import JsonResponse
import os
from django.contrib.auth.decorators import permission_required

#添加分类
@permission_required('myadmin.create_Cates',raise_exception=True)
def cates_add(request):
    #print(request.POST.get('name'))
    if request.method=='POST':
        data={}
        data['name'] = request.POST.get('name')
        data['pid'] = request.POST.get('pid')
        #判断是否是顶级
        if data['pid']=='0':
            data['path']='0,'
        else:
            #获取父级path
            pob=Cates.objects.get(id=data['pid'])
            #拼接当前path
            data['path']=pob.path+data['pid']+','

        ob=Cates(**data)
        ob.save()
        return HttpResponse('<script>alert("添加成功");location.href="' + reverse('cates_add') + '";</script>')

    else:
        #调用参数 获取所有的数据 并且手动添加一个临时字段 pname:分类名称
        catelist=get_cates_all()
        return render(request,'myadmin/cates_add.html',{'catelist':catelist})

#处理分类美化
def get_cates_all():
    #指定字段排序 并且
    #data=Cates.objects.all()
    # select *,concat(path,id) as paths from myadmin_cates order by paths;
    data = Cates.objects.extra(select={'paths': 'concat(path,id)'}).order_by('paths')

    #循环查询集中的对象 并且给每个对象添加一个属性
    for x in data:
        #统计path中的逗号个数-1
        l=x.path.count(',')-1
        #美化符号×级别的个数
        x.sub=l*'|---'
        #判断是否是顶级分类
        print(x.pid)
        if x.pid==0:
            x.pname='顶级分类'
        else:
            #通过循环添加一个临时字段字段
            pob=Cates.objects.get(id=x.pid)
            #把父元素的name 添加到自身当中
            x.pname=pob.name
    return data

#分类列表
@permission_required('myadmin.show_Cates',raise_exception=True)
def cates_index(request):
    #获取美化后的分类名称
    keyword = request.GET.get('keyword', None)
    types = request.GET.get('types', None)
    data=get_cates_all()

    if types == 'all':
        from django.db.models import Q
        data = Cates.objects.filter(Q(id__contains=keyword) | Q(name__contains=keyword))
        data=pname(data)
    elif types:
        # 如果不是all 并且是不假值 则进入这个条件
        # 通过拼接字典的方式 把types+__contains  拼成 id__contains:keyword 这样的 字典格式
        search = {types + '__contains': keyword}
        # 把data()对象 的值进行过滤  条件是serach 字典中值
        data = data.filter(**search)
        data = pname(data)


    #导入django分页模块
    from django.core.paginator import Paginator

    #实例化对象 并且获取获取总页数
    p=Paginator(data,10)

    #获取当前页码数 如果没有传递get  默认是1
    pageindex=request.GET.get('page',1)

    #把导入的模块pag  使用对象p.page() 传递当前页数 默认是1  得到的结果是<userlist 1 of 15>
    #意思是当前页码是1页 总共15页
    user_list=p.page(pageindex)


    context={'userlist':user_list}
    return render(request,'myadmin/cates_index.html',context)

#分类删除
@permission_required('myadmin.remove_Cates',raise_exception=True)
def cates_del(request):
    id=request.GET.get('cid')
    #获取 表中 所有自类 id
    res=Cates.objects.filter(pid=id).count()

    #如果还有值的话就禁止删除  否则就允许删除
    if res:
        return JsonResponse({'msg':'删除失败,请先删除子类'})
    else:
        ob=Cates.objects.get(id=id)
        ob.delete()
        return  JsonResponse({'msg':'删除成功'})

    #return HttpResponse('1')

#更新用户名
@permission_required('myadmin.edit_Cates',raise_exception=True)
def cates_update(request):
    id=request.GET.get('cid')
    name=request.GET.get('newname')
    #print(id,name)
    ob=Cates.objects.get(id=id)
    ob.name=name
    ob.save()
    data={'msg':'更新成功'}
    return JsonResponse(data)

#添加pname
def pname(data):
    for x in data:
        if x.pid==0:
            x.pname='顶级分类'
        else:
            #通过循环添加一个临时字段字段
            pob=Cates.objects.get(id=x.pid)
            #把父元素的name 添加到自身当中
            x.pname=pob.name
    return data